bitkeeper revision 1.242.1.1 (3ee5b2e6yiamD8UfKwvKw39hVfWFpg)
authorrgr22@boulderdash.cl.cam.ac.uk <rgr22@boulderdash.cl.cam.ac.uk>
Tue, 10 Jun 2003 10:28:54 +0000 (10:28 +0000)
committerrgr22@boulderdash.cl.cam.ac.uk <rgr22@boulderdash.cl.cam.ac.uk>
Tue, 10 Jun 2003 10:28:54 +0000 (10:28 +0000)
dom0_ops.h, dom0_ops.c:
  added CPU time to the list of values returned by a DOM0_GETDOMAININFO call
dom0_core.c:
  added a /proc/xeno/dom<n>/usage entry for tracking resource usage

BitKeeper/etc/logging_ok
xen/common/dom0_ops.c
xen/include/xeno/dom0_ops.h
xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/dom0_core.c
xenolinux-2.4.21-pre4-sparse/arch/xeno/drivers/dom0/dom0_ops.h

index 90b06479c8323bd7f77774167ab26ca35461b533..1af99792791f1ee0db2547bb2ca5c26b9e051977 100644 (file)
@@ -15,6 +15,7 @@ kaf24@plym.cl.cam.ac.uk
 kaf24@scramble.cl.cam.ac.uk
 kaf24@striker.cl.cam.ac.uk
 lynx@idefix.cl.cam.ac.uk
+rgr22@boulderdash.cl.cam.ac.uk
 rn@wyvis.camb.intel-research.net
 rn@wyvis.research.intel-research.net
 smh22@boulderdash.cl.cam.ac.uk
index c62b68b919998407e49a4c8cee3fc5678ab1d04e..e54446e334c0748ada4e7820535ae0fd7f4d47be 100644 (file)
@@ -236,6 +236,7 @@ long do_dom0_op(dom0_op_t *u_dom0_op)
                 list_entry(p->pg_head.next, struct pfn_info, list) -
                 frame_table;
             op.u.getdominfo.tot_pages   = p->tot_pages;
+            op.u.getdominfo.cpu_time    = p->cpu_time;
         }
 
         read_unlock_irqrestore(&tasklist_lock, flags);
index 8737e192aa7d8e73dfded2dd4d9fd066246f4ddd..93bb3e89c701ee18439828add5fffe1463dba149 100644 (file)
@@ -85,6 +85,7 @@ typedef struct dom0_getdominfo_st
   unsigned long mcu_advance;
   unsigned long pg_head;
   unsigned int tot_pages;
+  long long cpu_time;
 } dom0_getdominfo_t;
 
 
index d4777180e408871dcd695a0f694a20a972b890bc..3dadd5cebd144e542efa7378b24b677acde252b3 100644 (file)
@@ -55,6 +55,7 @@ typedef struct proc_mem_data {
 #define DOM_DIR         "dom"
 #define DOM_MEM         "mem"
 #define DOM_VIF         "vif"
+#define DOM_USAGE       "usage"
 
 #define MAP_DISCONT     1
 
@@ -112,6 +113,39 @@ struct file_operations dom_vif_ops = {
     read:    dom_vif_read
 };
 
+static ssize_t dom_usage_read(struct file * file, char * buff, size_t size, loff_t * off)
+{
+    char hyp_buf[128];
+    dom0_op_t op;
+    static int finished = 0;
+
+    if ( finished )
+    {
+        finished = 0;
+        return 0;
+    }
+
+    op.cmd = DOM0_GETDOMAININFO;
+    op.u.getdominfo.domain = (unsigned int)
+        ((struct proc_dir_entry *)file->f_dentry->d_inode->u.generic_ip)->data;
+
+    (void)HYPERVISOR_dom0_op(&op);
+
+    snprintf(hyp_buf, 128, "cpu: %lld\n", op.u.getdominfo.cpu_time);
+
+    if (*off >= (strlen(hyp_buf) + 1)) return 0;
+    
+    copy_to_user(buff, hyp_buf, strlen(hyp_buf));
+
+    finished = 1;
+
+    return strlen(hyp_buf) + 1;
+}
+
+struct file_operations dom_usage_ops = {
+    read:    dom_usage_read
+};
+
 
 static void create_proc_dom_entries(int dom)
 {
@@ -136,6 +170,15 @@ static void create_proc_dom_entries(int dom)
         file->proc_fops     = &dom_vif_ops;
         file->data          = (void *) dom;
     }
+
+    file = create_proc_entry(DOM_USAGE, 0600, dir);
+    if (file != NULL)
+    {
+        file->owner         = THIS_MODULE;
+        file->nlink         = 1;
+        file->proc_fops     = &dom_usage_ops;
+        file->data          = (void *) dom;
+    }
 }
 
 static ssize_t dom_mem_write(struct file * file, const char * buff, 
index 1a5b63dad26e0e26bcbb8ad3fc6b73613602af36..8f8949a8cd8ecad7374acc4851696d15cba6b911 100644 (file)
@@ -102,6 +102,7 @@ typedef struct dom0_getdominfo_st
   unsigned long mcu_advance;
   unsigned long pg_head;
   unsigned int tot_pages;
+  long long cpu_time;
 } dom0_getdominfo_t;